ExcelVBA字母加数字实现列递增 |
您所在的位置:网站首页 › excel 递加 › ExcelVBA字母加数字实现列递增 |
先上代码。 Function englishAdd(ByVal str As String) Dim h As Integer h = Len(str) Do While h > 0 While Mid(str, h, 1) = "Z" h = h - 1 If h = 0 Then englishAdd = String(Len(str) + 1, "A") Exit Function End If Wend Mid(str, h, 1) = Chr(Asc(Mid(str, h, 1)) + 1) englishAdd = Mid(str, 1, h) & String(Len(str) - h, "A") Exit Do Loop End Function调用格式为:temp=englishAdd(string),其中string为需要递增的字符串(字母) 例:str="XFZ" str=englishAdd(str) 运行后str的值变为"XGA",自加了1列。 下面进行速度测试。本次测试选用了三种不同的列数递增方式,区别如下: 1、提取单元格所在地址字符串,使用split()函数进行拆分后提取,简单易懂。 2、将单元格所在列数转换成字母表示。转载自https://blog.csdn.net/gold_star/article/details/52527087,此方法是将数字直接转换成字母表示。 3、采用以上代码进行测试。 为保证测试代码的过程一致性,顾把以上代码中原本按值传递的str改为按引用传递,省去临时变量的赋值操作。 由于递增的列数为从1开始,Excel文件最大列数为16384,顾进行如下代码测试: Sub 方法1() Dim v(2 To 16384) As String, a As Double a = Timer For num = 2 To 16384 v2 = Split(Cells(1, num).Address, "$") v(num) = v2(1) Next Debug.Print Timer - a End Sub Sub 方法2() Dim v(2 To 16384) As String, st As String, a As Double a = Timer For num = 2 To 16384 v(num) = f(num) Next Debug.Print Timer - a End Sub Sub 方法3() Dim v(2 To 16384) As String, str As String, a As Double str = "A" a = Timer For num = 2 To 16384 v(num) = englishAdd(str) Next Debug.Print Timer - a End Sub其中方法2的f()函数转自https://blog.csdn.net/gold_star/article/details/52527087,只是把其中的t改成了按值传递,方便测试。 下面是运行时间(手动按7次F5,通过debug记录运行时间): 方法1:方法2方法3 .15234375 .0390625 .0234375 .1640625 .0546875 .01953125 .15625 .05078125 .01953125 .15625 .05078125 .0234375 .16015625 .05859375 .01953125 .16015625 .05078125 .01953125 .16015625 .05859375 .0234375可以看出方法3的最长时间比方法2的最快运行时间高了0.1秒以上,而方法1就省略了。 如果能够帮到你的话欢迎转载。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |